有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中转换图像。通过socket传输图像

我有一台笔记本电脑和微控制器评估板MCB1700和微控制器NXP1768。 MCB1700有以太网端口、LCD(320 x 240)等。我有IDEµVision V4。03q用于在MCB1700上开发和下载C程序。此外,我还有用于在MCB1700上下载C程序的ULINK pro设备

我的任务是:

  1. 为了实现从笔记本电脑读取图像的Java-client,将该图像转换为RGB16(MCB1700的LCD支持这种图像表示),并通过socket连接将其发送给MCB1700
  2. 在MCB1700上实现服务器,通过插座连接从笔记本电脑接收图像并在LCD上显示
  3. 实际上还有很多其他任务要做,笔记本电脑还必须向MCB1700发送要执行的命令名。但问题是笔记本电脑和MCB1700之间的连接

我几乎完成了服务器端的工作。我当前版本的服务器创建被动socket连接并等待客户端。它还可以通过以太网发送和接收数据。 我的Java客户端成功连接到服务器。我通过发送和接收短线来测试它。现在我可以开发它,向服务器发送命令名(例如“SHOW ON LCD:”)和RGB16图像

问题是: 通过socket连接将命令名和RGB16图像从Java客户端发送到MCB1700服务器(在C上实现)的最佳方式是什么,以便在服务器C程序中方便地转换数据?最好以字节数组的形式发送所有数据:

MCB1700服务器必须以字节序列的形式接收数据

char* "SHOW ON LCD:" - bytes 0 - 11
unsigned short**
RGB16-Pixel[0][0] = 09 AE - bytes 12 - 13
RGB16-Pixel[0][1] =  14 1C    -   bytes 14 - 15
RGB16-Pixel[319][239] =  78 9F     -   bytes 76810 - 76811      

(抱歉,这幅插图质量太高)

在Java客户机中读取任何格式的图像并以字节数组的形式发送给MCB1700(如上图所示)的最佳方式是什么?我应该使用什么函数、类? 实际上,我有一些想法:

1)我可以以某种方式(我还不知道如何)将图像放入BufferedImage类型的对象中(它支持所需的图像格式):

BufferedImage image =
    new BufferedImage(320, 240, TYPE_USHORT_565_RGB);

2)读取循环中的每个像素

int oldRGB = image.getRGB(250, 180);

3)并逐字节顺序发送图像的每个像素

Socket connectionToDevice;  //Socket
 OutputStream outToServerStream;
 outToServerStream = connectionToDevice.getOutputStream();
 outToServerStream.write(    bytes of pixel to send   );

有没有更优雅的方式来完成这项任务? 我应该如何在Java客户机中读取和转换图像

4)我发现了这样一种有趣的图像传输方式,通过socket使用这样的ImageIO方法: Sending a screenshot (bufferedImage) over a socket in java

public static boolean write(RenderedImage im,
                            String formatName,
                            OutputStream output)


BufferedImage image = ....;
ImageIO.write(image, "PNG", socket.getOutputStream());

但我不确定它是否适合我的情况。String formatName对流有什么影响?我不知道。可能会增加一些额外的字节


共 (1) 个答案

  1. # 1 楼答案

    ImageIO.write(image, "PNG", socket.getOutputStream());
    

    How does String formatName influence on stream?

    它会告知方法编码图像的格式。有关支持的格式,请参见^{}

    就编码而言,它可以简单地归结为:

    1. 使用已知的、受支持的格式
    2. 在发送方和接收方使用相同的格式

    巴布亚新几内亚是一个不错的选择。它不像JPEG那样有损,也不像GIF那样仅限于256色。由于这些原因,它是posting screenshots at stack exchange sites的推荐格式